/*
 * UrlUtils.java
 *
 *  created: 20.3.2012
 *  charset: UTF-8
 */

package cz.mp.util;

import java.net.URL;


/**
 *
 * @author Martin Pokorný
 * @version 0.1
 */
public class UrlUtils {

    /** */
    private UrlUtils() {
    }

    /**
     * Přidá do URL na správné místo zadané číslo portu.
     * <pre>
     * {@literal http://localhost/libr, 8081 --> http://localhost:8081/libr}
     * {@literal http://localhost:8081/libr --> http://localhost:8081/libr}
     * {@literal localhost --> localhost:8081}
     * {@literal localhost:8081 --> localhost:8081}
     * </pre>
     *
     * @param url
     * @param port
     * @return 
     */
    public static String addPortToUrl(String url, int port) {        
        String[] parts = url.split("/");
        
        for(int i=0; i<parts.length; i++) {
            if (parts[i].length() == 0) {
                continue;
            }            
            if (parts[i].contains(".") || parts[i].equals("localhost")) {
                if (! parts[i].contains(":")) {
                    parts[i] = parts[i] + ":" + port;
                }
                break;
            }
        }
        
        StringBuilder result = new StringBuilder();
        for(int i=0; i<parts.length; i++) {
            if (parts[i].length() == 0) {
                result.append("/");
                continue;
            }
            result.append(parts[i]);
            if (i < parts.length-1) {
                result.append("/");
            }
        }
        
        return result.toString();
    }

    /**
     * Na konec URL správně přidá zadanou cestu.
     *
     * @param url
     * @param path
     * @return 
     */
    public static String addPathToUrl(String url, String path) {
        StringBuilder result = new StringBuilder();
        result.append(url);
        if (! url.endsWith("/")) {
            result.append("/");            
        }
        
        if (path.startsWith("/")) {
            result.append(path.substring(1));
        }
        else {
            result.append(path);
        }
        
        return result.toString();
    }
    
    /**
     * Na konec URL správně přidá zadanou cestu.
     * 
     * @param url
     * @param path
     * @return 
     */
    public static String addPathToUrl(URL url, String path) {
        return addPathToUrl(url.toString(),path);
    }

    
    /**
     * Získá základní URL, bez parametrů a odkazu na kotvu.
     * <pre>
     * {@literal http://localhost/x.html?b=abc --> http://localhost/x.html}
     * {@literal http://localhost/x.html#anchor5 --> http://localhost/x.html}
     * </pre>
     * 
     * @param url
     * @return 
     */
    public static String getUrlWithoutParams(String url) {
        if (url.indexOf("?") != -1) {
            return url.substring(0, url.indexOf("?"));
        }
        if (url.indexOf("#") != -1) {
            return url.substring(0, url.indexOf("#"));
        }
        return url;
    }
    
}   // UrlUtils.java
